package com.gitee.mp.annotation;

import com.gitee.mp.extend.ExtendParamsGenerator;
import io.milvus.grpc.DataType;

import java.lang.annotation.*;

/**
 * 字段
 *
 * @author hongda.li
 */
@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Field {

    /**
     * 字段名称
     *
     * @return 字段名称
     */
    String name() default "";

    /**
     * 字段描述
     *
     * @return 字段描述
     */
    String description() default "";

    /**
     * 数据类型
     *
     * @return 字段类型
     */
    DataType type();

    /**
     * 字段最大长度
     * 对于 VARCHAR 字段，该属性为字符串的最大长度
     * 对于 ARRAY 字段，该属性为数组的大小
     * [1, 65535]
     *
     * @return 最大长度
     */
    int maxLength() default -1;

    /**
     * 向量的维度
     * [1, 32768]
     *
     * @return 向量维度
     */
    int dimension() default -1;

    /**
     * 当字段为数组时，数组元素的类型
     *
     * @return 数据元素类型
     */
    DataType elementType() default DataType.None;

    /**
     * 主键标识
     *
     * @return 是否为主键
     */
    boolean isPrimary() default false;

    /**
     * 是否主键自增
     *
     * @return 主键自增
     */
    boolean autoIncrement() default false;

    /**
     * 是否为动态类型
     *
     * @return 动态类型
     */
    boolean isDynamic() default false;

    /**
     * 是否为分区字段
     *
     * @return 分区字段
     */
    boolean isPartitionKey() default false;

    /**
     * 扩展配置生成器
     * 此生成器需要存在于 SpringContext 中
     *
     * @return 扩展配置生成器
     */
    Class<? extends ExtendParamsGenerator> generator() default ExtendParamsGenerator.class;
}
